package cn.adkii.base.demo.proxy;

import cn.adkii.base.demo.proxy.impl.StarImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author malingdi
 * @description JDK动态代理
 * 基于接口的动态代理
 * @date 2023/11/22 17:00
 */
public class JDKProxyDemo {

    public static void main(String[] args) {
        // 1.被代理的对象
        Star star = new StarImpl();
        // 2.创建代理对象
        /**
         * ClassLoader loader: 类的加载器
         * Class<?>[] 类的接口类型，可以是多个
         * InvocationHandler 处理流程
         */
        Star proxy = (Star) Proxy.newProxyInstance(StarImpl.class.getClassLoader(), StarImpl.class.getInterfaces(), (proxy1, method, args1) -> {
            if ("sing".equals(method.getName())){
                System.out.println("要唱歌了啊，先收费");
                System.out.println("快点把舞台整理好");
            }else {
                System.out.println("要跳舞了啊，先收费");
                System.out.println("快点把地板收拾干净");
            }
           return method.invoke(star, args1);
        });
        proxy.dance("小马");
        proxy.sing("小张");
    }
}
